<?php

class admin_model_app_app extends model
{
    
    public $api = 'http://www.mrbone.org/?app=api';

    public function get_apps()
    {
        $lib_http = bone::get_lib('http');
        $response = $lib_http->post($this->api . '&task=get_apps', post());
        
        $apps = json_decode($response);
        return $apps;
    }


    // 安装应用文件
    public function install($app_id)
    {
        
        $lib_http = bone::get_lib('http');
        $response = $lib_http->get($this->api . '&task=get_app&app_id=' . $app_id);
        
        $app = json_decode($response);
        
        if (!$app)
        {
            $this->set_error('没有找到指定的应用 ');
            return false;
        }
        
        if (file_exists(BONE_ROOT . DS . 'apps' . DS . $app) || file_exists(BONE_DIR . DS . 'apps' . DS . $app))
        {
            $this->set_error('应用文件夹 ' . $app . '已被占用 ');
            return false;
        }
        
        $tmp = BONE_DIR . DS . 'tmp' . DS . 'app_' . $app_id;
        
        $response = $lib_http->get('http://www.mrbone.org/?app=app&task=download&app_id=' . $app_id);
        file_put_contents($response, $tmp);
        
        $zip = bone::get_lib('zip');
        $zip->open($tmp);
        if (!$zip->extract_to($tmp))
        {
            $this->set_error($zip->get_error());
            return false;
        }
        
        if (!(file_exists($tmp . DS . 'frontend') || file_exists($tmp . DS . 'backend')))
        {
            $this->set_error('安装包目录结构错误, 未找到 frontend 和 backend 文件夹');
            return false;
        }
        
        $fso = bone::get_lib('fso');
        
        // 复制前台文件
        if (is_dir($tmp . DS . 'frontend')) $fso->copy_dir($tmp . DS . 'frontend', BONE_ROOT . DS . 'apps' . DS . $app);
        
        // 复制后台文件
        if (is_dir($tmp . DS . 'backend')) $fso->copy_dir($tmp . DS . 'backend', BONE_ADMIN . DS . 'apps' . DS . $app);
        
        // 安装数据库文件
        $file = BONE_ADMIN . DS . 'apps' . DS . $app . DS . 'install.sql';
        if (file_exists($file))
        {
            $db = bone::get_db();
            $sqls = $this->split_sql(file_get_contents($file));
            foreach ($sqls as $sql)
            {
                $db->execute($sql);
            }
        }
        
        $fso->rm_dir($tmp);
        
        return true;
    }


}
?>